package datos;


import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import conexion.Conexion;

public class AccionesUsuario {

/*public static boolean validarUsuario(String user, String pass){
		try{
			Statement stm=Conexion.conectar().createStatement();
			ResultSet rs=stm.executeQuery("select * from usuario where idUsuario='"+user+"' and password='"+pass+"'");
			if(rs.next()){
				return true;
			}
			Conexion.desconectar();
			return false;
		}catch(Exception e){
			e.printStackTrace();
			
		}
		return false;
	}*/
	
	
	public static boolean validarUsuario(Usuario u){
		String user=u.getNombreUsuario();
		String pass=u.getPass();
		
		
		try{
			Statement stm=Conexion.conectar().createStatement();
			ResultSet rs=stm.executeQuery("select * from usuario where idUsuario COLLATE utf8_bin='"+user+"' and password COLLATE utf8_bin='"+pass+"'");
			if(rs.next()){
			return true;
			}else{
				Conexion.desconectar();
				return false;
			}
			
			
		}catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}
	
	public static boolean validarPermiso(Usuario u, String recurso){
		try{
			Statement stm=Conexion.conectar().createStatement();
			ResultSet rs=stm.executeQuery("select * from tipo_recurso where id_usuario='"+u.getNombreUsuario()+"' and nombreRecurso='"+recurso+"'");
			if(rs.next()){
				return true;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}
	

	
	public static ArrayList<Usuario> getAll(){
		ArrayList<Usuario> usuarios=new ArrayList<Usuario>();
		try {
			Statement stm = Conexion.conectar().createStatement();
			ResultSet rs = stm.executeQuery("select * from usuario");
			while (rs.next()){
				Usuario u = new Usuario(rs.getString("idUsuario"), rs.getString("password"));
				u.setPermisoClientes(rs.getString("permisoClientes"));
				u.setPermisoCompras(rs.getString("permisoCompras"));
				u.setPermisoOtrasConsultas(rs.getString("permisoOtrasConsultas"));
				u.setPermisoProveedores(rs.getString("permisoProveedores"));
				u.setPermisoStock(rs.getString("permisoStock"));
				u.setPermisoUsuarios(rs.getString("permisoUsuarios"));
				u.setPermisoVentas(rs.getString("permisoVentas"));
				usuarios.add(u);
			}
			stm.close();
			Conexion.desconectar();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return usuarios;
	}
	
	public static Usuario getUsuarioById(String idUsuario){
		Usuario u = null;
		try {
			Statement stm = Conexion.conectar().createStatement();
			ResultSet rs = stm.executeQuery("select * from usuario where idUsuario='"+idUsuario+"'");
			while (rs.next()){
				 u = new Usuario(rs.getString("idUsuario"), rs.getString("password"));
				u.setPermisoClientes(rs.getString("permisoClientes"));
				u.setPermisoCompras(rs.getString("permisoCompras"));
				u.setPermisoOtrasConsultas(rs.getString("permisoOtrasConsultas"));
				u.setPermisoProveedores(rs.getString("permisoProveedores"));
				u.setPermisoStock(rs.getString("permisoStock"));
				u.setPermisoUsuarios(rs.getString("permisoUsuarios"));
				u.setPermisoVentas(rs.getString("permisoVentas"));
			}
			stm.close();
			Conexion.desconectar();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return u;
	}
	
	
/*	
	public static void modificaUsuario(Usuario u){
		int idTipoUsuario=u.getTipoUsuario();
		String nombreUsuario = u.getNombreUsuario();
		String password = u.getPass();
	
		try {
			Statement stm=Conexion.conectar().createStatement();
			stm.executeUpdate("UPDATE usuario SET idUsuario='"+nombreUsuario+"', idTipo='"+idTipoUsuario+"', password='"+password+"' WHERE idUsuario = '"+nombreUsuario+"'");
			stm.close();
			Conexion.desconectar();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}*/
	
	public static void modificaUsuarioVer(String nombreViejo, String nombreNuevo, String passNuevo){
			
		try {
			
			Statement stm=Conexion.conectar().createStatement();
			stm.executeUpdate("UPDATE usuario SET idUsuario='"+nombreNuevo+"', password='"+passNuevo+"' WHERE idUsuario = '"+nombreViejo+"'");
			stm.close();
			Conexion.desconectar();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void modificaUsuarioEditar(String nombreViejo, String nombreNuevo, String passNuevo,String permisoVentas, String permisoCompras, String permisoStock, String permisoClientes, String permisoProveedores, String permisoOtrasConsultas, String permisoUsuarios){
		
		try {
			
			Statement stm=Conexion.conectar().createStatement();
			stm.executeUpdate("UPDATE usuario SET idUsuario='"+nombreNuevo+"', password='"+passNuevo+"', permisoVentas='"+permisoVentas+"', permisoCompras='"+permisoCompras+"', permisoStock='"+permisoStock+"', permisoClientes='"+permisoClientes+"', permisoProveedores='"+permisoProveedores+"', permisoOtrasConsultas='"+permisoOtrasConsultas+"', permisoUsuarios='"+permisoUsuarios+"' WHERE idUsuario = '"+nombreViejo+"'");
			stm.close();
			Conexion.desconectar();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	
	public static void bajaUsuario(String idUsuario){
		try{
			Statement stm=Conexion.conectar().createStatement();
			stm.executeUpdate("delete from usuario where idUsuario='"+idUsuario+"'");
			stm.close();
			Conexion.desconectar();
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	
	public static void altaUsuario(Usuario u ,String permisoVentas, String permisoCompras, String permisoStock, String permisoClientes, String permisoProveedores, String permisoOtrasConsultas, String permisoUsuarios ){
		try{
			Statement stm=Conexion.conectar().createStatement();
			stm.executeUpdate("insert into usuario (idUsuario, password, permisoVentas, permisoCompras, permisoStock, permisoClientes, permisoProveedores, permisoOtrasConsultas, permisoUsuarios) values('"+u.getNombreUsuario()+"','"+u.getPass()+"','"+permisoVentas+"','"+permisoCompras+"','"+permisoStock+"','"+permisoClientes+"','"+permisoProveedores+"','"+permisoOtrasConsultas+"','"+permisoUsuarios+"')");
			stm.close();
			Conexion.desconectar();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static boolean existeNombreUsuario(String nombreUsuario){
		
		try {
			Statement stm=Conexion.conectar().createStatement();
			ResultSet rs=stm.executeQuery("select * from usuario where idUsuario='"+nombreUsuario+"'");
			if(rs.next()){
				return true;
			}
			stm.close();
			Conexion.desconectar();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;
	}
	
 	public static String reemplazar(String cadena) {
		  return cadena.replaceAll("_",".");
		}
 	public static String ocultarPassword(String pass){
 		String resultado = "";
 		for (int i = 0; i < pass.length(); i++) {
			resultado += "*"; 
		}
 		return resultado;
 	}
 	
 	public static void addPermisos(ArrayList<String> permisosRecursos, Usuario u){
 		try{
 			Statement stm=Conexion.conectar().createStatement();
 			
 			for(int i=0; i<permisosRecursos.size(); i++){
 				stm.executeUpdate("insert into tipo_recurso values ('"+u.getNombreUsuario()+"','"+permisosRecursos.get(i)+"')");
 			}
 			
 		}catch(Exception e){
 			e.printStackTrace();
 		}
 	}
 	
 	public static void updatePermisos(ArrayList<String> permisosRecursos, Usuario u){
 		ArrayList<String> permisosExistentes=new ArrayList<String>();
 		ArrayList<String> permisosEliminar=new ArrayList<String>();
 		try{
 			Statement stm=Conexion.conectar().createStatement();
 			ResultSet rs=stm.executeQuery("select * from tipo_recurso where id_usuario='"+u.getNombreUsuario()+"'");
 			while(rs.next()){
 				permisosExistentes.add(rs.getString("nombreRecurso"));
 			}
 		
 		}catch(Exception e){
 			e.printStackTrace();
 		}
 	}
 	
 	public static ArrayList<String> getPermisosById(String idUsuario){
 		ArrayList<String> permisos=new ArrayList<String>();
 		try{
 			Statement stm=Conexion.conectar().createStatement();
 			ResultSet rs=stm.executeQuery("select * from tipo_recurso where id_usuario='"+idUsuario+"'");
 			while(rs.next()){
 				permisos.add(rs.getString("nombreRecurso"));
 			}
 		}catch(Exception e){
 			e.printStackTrace();
 		}
 		return permisos;
 	}
 	
 	public static ArrayList<String> getPermisosById2(String idUsuario){
 		ArrayList<String> permisos=new ArrayList<String>();
 		try{
 			Statement stm=Conexion.conectar().createStatement();
 			ResultSet rs=stm.executeQuery("select * from usuario where idUsuario='"+idUsuario+"'");
 			while(rs.next()){
 			permisos.add(rs.getString("permisoVentas"));
 			permisos.add(rs.getString("permisoCompras"));
 			permisos.add(rs.getString("permisoStock"));
 			permisos.add(rs.getString("permisoClientes"));
 			permisos.add(rs.getString("permisoProveedores"));
 			permisos.add(rs.getString("permisoOtrasConsultas"));
 			permisos.add(rs.getString("permisoUsuarios"));
 			}
 		}catch(Exception e){
 			e.printStackTrace();
 		}
 		return permisos;
 	}
 	
 	public static void updateNombreUsuarioRecurso(String idUsuarioAnt, String idUsuarioNuevo, ArrayList<String> permisos){
 		
 		
 		try{
 			Statement stm=Conexion.conectar().createStatement();
 			System.out.println(permisos.size());
 			for(int i=0; i<permisos.size(); i++){
 				stm.executeUpdate("insert into tipo_recurso values ('"+idUsuarioNuevo+"','"+permisos.get(i)+"')");	
 			}
 			
 		}catch(Exception e){
 			e.printStackTrace();
 		}
 	}
 	public static void deletePermisosUsuario(String idUsuario){
 		try{
 			Statement stm=Conexion.conectar().createStatement();
 			stm.executeUpdate("delete from tipo_recurso where id_usuario='"+idUsuario+"'");
 		}catch(Exception e){
 			e.printStackTrace();
 		}
 	}
}
